package org.dei.perla.sys.query.llqruntime.datacollection;

import org.dei.perla.parser.expressions.Node;
import org.dei.perla.parser.statements.Statement;
import org.dei.perla.sys.device.fpc.*;
import org.dei.perla.sys.query.llqruntime.QueryInformation;
import org.dei.perla.sys.query.llqruntime.datastructures.*;


/**
 * Questa classe wrappa tutte le informazione necessarie per effettuare correttamente il 
 * sampling dei dati dal sistema pervasive
 * @author Schreiber, Camplani, Fortunato, Marelli, Rota et. al.
 */
public class LLDataCollectionInfo extends QueryInformation {
	
	/**
	 * L'oggetto contenente le tempistiche sul campionamento (REFRESH, IF-EVERY-ELSE, UNSUPPORTED SAMPLE RATE)
	 */
	private SamplingData pSampData;
	
	/**
	 * L'oggetto Node che rappresenta la clusola WHERE 
	 */
	private Node pWhere;
	
	/**
	 * Il buffer in cui inserire i dati appena raccolti (e filtrati dalla WHERE)
	 */
	private Buffer pLocalBuffer;
	
	/**
	 * L'FPC da cui i dati da campionare devono provenire
	 */
	private FunctionalityProxyComponent pFPC;

	/**
	 * Costruttore
	 * @param parStatement Il LLStatemente di cui si stanno rappresentando le info
	 * @param parFPC L'FPC da cui i dati da campionare devono provenire
	 * @param parSampData L'oggetto contenente le tempistiche sul campionamento (REFRESH, IF-EVERY-ELSE, UNSUPPORTED SAMPLE RATE)
	 * @param parWhere L'oggetto Node che rappresenta la clusola WHERE
	 * @param parBuffer Il buffer in cui inserire i dati appena raccolti (e filtrati dalla WHERE)
	 */
	public LLDataCollectionInfo(Statement parStatement, FunctionalityProxyComponent parFPC, SamplingData parSampData, Node parWhere, Buffer parBuffer) {
		super(parStatement);
		this.pSampData = parSampData;
		this.pWhere = parWhere;
		this.pLocalBuffer = parBuffer;
		this.pFPC = parFPC;	
	}
	
	/**
	 * @return Il buffer in cui inserire i dati appena raccolti (e filtrati dalla WHERE)
	 */
	public Buffer getLocalBuffer() {
		return this.pLocalBuffer;
	}
	
	/**
	 * @return L'FPC da cui i dati da campionare devono provenire
	 */
	public FunctionalityProxyComponent getAssociatedFPC() {
		return this.pFPC;
	}
	
	/**
	 * @return L'oggetto contenente le tempistiche sul campionamento (REFRESH, IF-EVERY-ELSE, UNSUPPORTED SAMPLE RATE)
	 */
	public SamplingData getSamplingData() {
		return this.pSampData;
	}
	
	/**
	 * @return L'oggetto Node che rappresenta la clusola WHERE
	 */
	public Node getWhereCondition() {
		return this.pWhere;
	}

	
}
